/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import database_beans.Fajlovi;
import database_beans.Predmet;
import database_beans.Publikacije;
import database_beans.Zaposleni;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.primefaces.event.FileUploadEvent;
import server.Log;
import server.Util;

/**
 *
 * @author stefan
 */
@ManagedBean
@ViewScoped
public class ZaposleniBean implements Serializable {

    @ManagedProperty("#{userBean}")
    private UserBean user;

    private Publikacije publikacija = new Publikacije();

    private ArrayList<Zaposleni> zaposleniList;

    private Map<String, String> zaposleniMap;

    private List<String> selectedZaposleni;

    private String[] kategorije = new String[]{"Rad na međunarodnoj konferenciji", "Rad na domaćoj konferenciji", "Rad u međunarodnom casopisu",
        "Rad u domaćem casopisu", "Udžbenik", "Monologija"};

    private int selected;
    
    private byte [] data;
    
    private String autori;
    
    private Fajlovi file;
    
    private ArrayList<Predmet> predmetList;

    public int getSelected() {
        return selected;
    }

    public void setSelected(int selected) {
        this.selected = selected;
    }

    /**
     * Creates a new instance of ZaposleniBean
     */
    public ZaposleniBean() {
    }
    
    @PostConstruct
    public void init(){
        loadListuZaposlenih();
    }

    public Fajlovi getFile() {
        return file;
    }

    public void setFile(Fajlovi file) {
        this.file = file;
    }

    public ArrayList<Predmet> getPredmetList() {
        return predmetList;
    }

    public void setPredmetList(ArrayList<Predmet> predmetList) {
        this.predmetList = predmetList;
    }
    
    
    public UserBean getUser() {
        return user;
    }

    public void setUser(UserBean user) {
        this.user = user;
    }

    public Publikacije getPublikacija() {
        return publikacija;
    }

    public void setPublikacija(Publikacije publikacija) {
        this.publikacija = publikacija;
    }

    public ArrayList<Zaposleni> getZaposleniList() {
        return zaposleniList;
    }

    public void setZaposleniList(ArrayList<Zaposleni> zaposleniList) {
        this.zaposleniList = zaposleniList;
    }

    public Map<String, String> getZaposleniMap() {
        return zaposleniMap;
    }

    public void setZaposleniMap(Map<String, String> zaposleniMap) {
        this.zaposleniMap = zaposleniMap;
    }

    public List<String> getSelectedZaposleni() {
        return selectedZaposleni;
    }

    public void setSelectedZaposleni(List<String> selectedZaposleni) {
        this.selectedZaposleni = selectedZaposleni;
    }

    public String[] getKategorije() {
        return kategorije;
    }

    public void setKategorije(String[] kategorije) {
        this.kategorije = kategorije;
    }

    public byte[] getData() {
        return data;
    }

    public void setData(byte[] data) {
        this.data = data;
    }

    public String getAutori() {
        return autori;
    }

    public void setAutori(String autori) {
        this.autori = autori;
    }

    public String getSelectedZaposleniString() {
        String ret = "";
        for (String s : selectedZaposleni) {
            ret += s + " , ";
        }

        return ret;
    }

    public void updateData() {
        Session s = Util.getSesion();
        Transaction t = s.beginTransaction();
        try {
            
            s.save(user.getZaposleni());
            t.commit();
        } catch (Exception e) {
            t.rollback();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ova funkcija ne radi nista bre!!!"));
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Podaci snimljeni!!!"));
    }

    

    private void loadListuZaposlenih() {
        Session session = Util.getSesion();
        Transaction t = session.beginTransaction();
        Criteria cr = session.createCriteria(Zaposleni.class);
        cr.add(Restrictions.ne("idKorisnik", user.getIdKorisnik()));
        Log.i("Nadjeno " + cr.list().size() + "zaposlenih za publikacije");
        selectedZaposleni = new ArrayList<String>();
        zaposleniMap = new HashMap<String, String>();
        if (!cr.list().isEmpty()) {
            ArrayList<Zaposleni> temp = (ArrayList<Zaposleni>) cr.list();
            for (Zaposleni zap : (ArrayList<Zaposleni>) cr.list()) {
                zaposleniMap.put("" + zap.getKorisnik().getIme() + " " + zap.getKorisnik().getPrezime(), "" + zap.getKorisnik().getIme() + " " + zap.getKorisnik().getPrezime());
            }
        }
        t.commit();
    }

    public void snimiPublikaciju() {
        Session session = Util.getSesion();
        Transaction t = session.beginTransaction();
        try {
            String sviAutori = "";
            if (!selectedZaposleni.isEmpty()) {
                for (String s : selectedZaposleni) {
                    sviAutori += s + " ";
                    Log.i("Trbalo bi da stavim: " + s);
                }
            }
            sviAutori += autori;
            publikacija.setAutori(sviAutori);
            //publikacija.setKategorija(kategorije[selected]);
            //session.save(file);
            if(file != null){
                publikacija.setData(file.getData());
            }
            session.save(publikacija);
            t.commit();
            FacesMessage msg = new FacesMessage(null,"Publikacija snimljena");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            Log.i("Snimio Poblukaciju");
        } catch (Exception e) {
            t.rollback();
            e.printStackTrace();            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Greska! Publikacija nije snimljena"));
        } 
    }

    public boolean validatorOfMine() {
        return true;
    }
    
    public void uploadHandler(FileUploadEvent event){
        file = new Fajlovi();
        file.setData(event.getFile().getContents());
        file.setNaziv(event.getFile().getFileName());
        file.setVelicina(event.getFile().getSize() / 1024);
        file.setTip("publikacija");
        file.setDatum(new Date());
        Log.i("Upload hendler izvrsen za fajl " + event.getFile().getFileName());
    }

   
}
